<?php 
include_once 'produit.php';
include_once 'database_manager.php';

class ProduitManager
{
	public static function afficherListeProduit()
	{
		$co = DataBaseManager::getInstance();
		$req = $co->execRequete("SELECT * FROM tproduit ORDER BY ID_PRODUIT");
		$err = "";
		
		if($req != null)
		{
			while($donne = mysqli_fetch_assoc($req))
			{
				$produit = Produit::fillProduit($err, 
												$donne["ID_PRODUIT"],
												$donne["LIBELLE_PRODUIT"],
												$donne["CATEGORIE_PRODUIT"],
												$donne["PRIX_PRODUIT"],
												$donne["ID_COMMERCANT"],
												$donne["PATH_IMAGE"],
												$donne["QTE_EN_STOCK"],
												$donne["NB_VENTES"]);
				echo $err;
				
				if(empty($err))
					$produit->afficher();		
			}
		}
		$co->libereResultatRequete($req);
	}
	
	public static function afficherListeBoxCategorie()
	{
		$co = DataBaseManager::getInstance();
		$req = $co->execRequete("SELECT * FROM tcategorie ORDER BY ID_CATEGORIE");
		$err = "";
		
		if($req != null)
		{
			echo '<select name="categorie" size="1">';
			while($donne = mysqli_fetch_assoc($req))
			{
				$categorie = Categorie::fillCategorie($err, 
												$donne["ID_CATEGORIE"],
												$donne["LIBELLE_CATEGORIE"]);
				echo $err;
				
				if(empty($err))
					echo '<option value=\''.$categorie->getId().'\'>'.$categorie->getNom().'</option>';	
			}
			echo '</select>';
		}
		
		$co->libereResultatRequete($req);
	}

	/**
	*	Permet de retourner la liste des produits pour une catégorie
	*	$nomCategorie : Numero de la catégorie des produits recherchés
	*	@return Retourne un tableau de Produit
	**/
	public static function getProduitsByCategorie($numCategorie)
	{
		$tabProduit = array();
		$co = DataBaseManager::getInstance();
		$req = $co->execRequete("SELECT * FROM tproduit WHERE QTE_EN_STOCK > 0 AND CATEGORIE_PRODUIT = '".$numCategorie."'");
		$err = "";
		
		while($donne = mysqli_fetch_assoc($req))
		{
			$produit = Produit::fillProduit($err, 
												$donne["ID_PRODUIT"],
												$donne["LIBELLE_PRODUIT"],
												$donne["CATEGORIE_PRODUIT"],
												$donne["PRIX_PRODUIT"],
												$donne["ID_COMMERCANT"],
												$donne["PATH_IMAGE"],
												$donne["QTE_EN_STOCK"],
												$donne["NB_VENTES"]);
			$tabProduit[] = $produit;		
		}
		
		return $tabProduit;
	}
	
	/**
	*	Permet de retourner la liste des produits pour une catégorie et en fonction d'un nom que l'utilisateur recherche
	*	$nomCategorie : Numero de la catégorie des produits recherchés
	*	$name : Nom que l'utilisateur a rentré dans le champ de recherche
	*	@return Retourne un tableau de Produit
	**/
	public static function searchProductByCategorieAndByName($numCategorie, $name)
	{
		$tabProduit = array();
		$co = DataBaseManager::getInstance();
		
		if($numCategorie != 0)
			$request = "SELECT * FROM tproduit WHERE QTE_EN_STOCK > 0 AND CATEGORIE_PRODUIT = '".$numCategorie."' AND UPPER(LIBELLE_PRODUIT) LIKE '%".strtoupper($name)."%'";
		else
			$request = "SELECT * FROM tproduit WHERE QTE_EN_STOCK > 0 AND UPPER(LIBELLE_PRODUIT) LIKE '%".strtoupper($name)."%'";
		
		$req = $co->execRequete($request);
		$err = "";
		
		while($donne = mysqli_fetch_assoc($req))
		{
			$produit = Produit::fillProduit($err, 
												$donne["ID_PRODUIT"],
												$donne["LIBELLE_PRODUIT"],
												$donne["CATEGORIE_PRODUIT"],
												$donne["PRIX_PRODUIT"],
												$donne["ID_COMMERCANT"],
												$donne["PATH_IMAGE"],
												$donne["QTE_EN_STOCK"],
												$donne["NB_VENTES"]);
			$tabProduit[] = $produit;		
		}
		
		return $tabProduit;
	}

	/**
	*	Permet de supprimer un produit de la liste des produits sur le marché
	*	$idProduit : Identifiant du produit à supprimer
	**/
	public static function eraseProduit($idProduit)
	{
		$co = DataBaseManager::getInstance();
		$request = "DELETE FROM tproduit WHERE ID_PRODUIT = '".$idProduit."'";
		$req = $co->execRequete($request);		
		$co->libereResultatRequete($req);
	}
	
	/**
	*	Permet de mettre à jour la quantité disponible pour ce produit
	*	$idProduit : Identifiant du produit
	*	$nvelleQte : Nouvelle quantité disponible en stock
	**/
	public static function updateQteProduit($idProduit, $nvelleQte)
	{
		$co = DataBaseManager::getInstance();
		$request = "UPDATE tproduit SET QTE_EN_STOCK = '".$nvelleQte."' WHERE ID_PRODUIT = '".$idProduit."'";
		$req = $co->execRequete($request);		
		$co->libereResultatRequete($req);
	}
	
	/**
	*	Permet de retourner le produit correspondant à l'identiifant
	*	$idProduit -> 	Identifiant du produit
	*	@return : Retourne une instance de produit
	**/
	public static function getProduit($idProduit)
	{
		$co = DataBaseManager::getInstance();
		$req = $co->execRequete("SELECT * FROM tproduit WHERE ID_PRODUIT = '".$idProduit."'");
		$err = "";
		
		if($req != null)
		{
			$donne = mysqli_fetch_assoc($req);
			$produit = Produit::fillProduit($err, 
												$donne["ID_PRODUIT"],
												$donne["LIBELLE_PRODUIT"],
												$donne["CATEGORIE_PRODUIT"],
												$donne["PRIX_PRODUIT"],
												$donne["ID_COMMERCANT"],
												$donne["PATH_IMAGE"],
												$donne["QTE_EN_STOCK"],
												$donne["NB_VENTES"]);
		}
		$co->libereResultatRequete($req);
		return $produit;
	}

	/**
	* Retourne les meilleures ventes de produits
	* $nbProduit -> Nombre de produits à retourner
	**/
	public static function getBestSales($nbProduits)
    {
		$products = array();
		$co = DataBaseManager::getInstance();
		$req = $co->execRequete("SELECT * FROM tproduit WHERE QTE_EN_STOCK > 0 ORDER BY NB_VENTES LIMIT 0,".$nbProduits);
		$err = "";
		
		while($data = mysqli_fetch_assoc($req))
		{
			$produit = Produit::fillProduit($err, 
												$data["ID_PRODUIT"],
												$data["LIBELLE_PRODUIT"],
												$data["CATEGORIE_PRODUIT"],
												$data["PRIX_PRODUIT"],
												$data["ID_COMMERCANT"],
												$data["PATH_IMAGE"],
												$data["QTE_EN_STOCK"],
												$data["NB_VENTES"]);
			$products[] = $produit;		
		}
		
		return $products;
    }
	
	/**
	*	Permet d'incrémenter  de 1 le nombre de ventes d'un produit
	*	$idProduit -> Identifiant du produit.
	**/
	public static function IncNbVente($idProduit)
	{
		$co = DataBaseManager::getInstance();
		$product = ProduitManager::getProduit($idProduit);
		$nvVente = $product->getNbVente() + 1;
		
		$request = "UPDATE tproduit SET NB_VENTES = '".$nvVente."' WHERE ID_PRODUIT = '".$idProduit."'";
		$req = $co->execRequete($request);		
		$co->libereResultatRequete($req);
	}

	/**
	*	Permet de récupérer le prochain Identifiant unique (un numéro) qui va permettre d' uploader l'image d'un produit et de le renommer sans doublons.
	**/
	public static function NextIDFile()
	{
		$co = DataBaseManager::getInstance();
		$req = $co->execRequete("SELECT MAX(SUBSTRING(PATH_IMAGE, 6)) + 1 as ID FROM `tproduit` WHERE PATH_IMAGE LIKE 'image%'");
		$donne = mysqli_fetch_assoc($req);
		
		$co->libereResultatRequete($req);
		
		if($donne["ID"] == NULL)
			return 0;
		else
			return $donne["ID"];
	}

	/**
	*	Permet d'insérer un nouveau produit en base
	**/
	public static function InsertProduct($nom, $prixU, $idCommercant, $categorie, $qte, $nomFile = NULL)
	{
		$co = DataBaseManager::getInstance();
		$request = "INSERT INTO tproduit(LIBELLE_PRODUIT, PRIX_PRODUIT, ID_COMMERCANT, PATH_IMAGE, CATEGORIE_PRODUIT, QTE_EN_STOCK, NB_VENTES) 
		VALUES ('".$nom."','".$prixU."','".$idCommercant."','".$nomFile."','".$categorie."','".$qte."', '0')";
        $req = $co->execRequete($request);
		$co->libereResultatRequete($req);
	}
}
?>